The present invention relates to development of computer systems solutions and more particularly to the development of such solutions using patterns and virtual machines.
Development of high-quality computer applications can be very difficult given the time and budget constraints that the developers of such applications ordinarily must comply with. The abundance of hardware architectures, the diversity of available operating systems and network platforms, and the demands of global competition make it increasingly difficult to build high quality software from the ground up within typical time and cost constraints.
To build quality software today, many organizations stress the reuse of existing software models, designs and implementations that have already proven themselves to be useful. In an effective reuse process, attempts are made to limit the use of new code to code that is specific to a particular application.
Moreover, software development organizations have begun to use patterns in developing new software applications. In simple terms, a pattern can be defined as a model or plan used as a guide in making things. The existence of patterns grew out of a realization that software developers must face similar challenges related to a myriad of programming topics, such as persistence, distribution, flow control, error handling, etc., in many different applications and domains. Over time, experienced software developers and architects created a body of literature that document different types of reusable knowledge in the form of patterns.
Patterns codify reusable or repeatable experience and knowledge of people who have previously performed, perhaps many times, the task represented by the pattern. Patterns serve to document both proven solutions to problems and proven pitfalls that have been encountered in prior attempts to solve the problems and should be avoided. One example of reusable knowledge is a design pattern that describes the elements of a software system and the relationships among them and provides a common structure for communicating elements that solved a general problem within a particular context. Another example of reusable knowledge is an architectural pattern that expresses the overall structural organization of software systems and provides predefined subsystems with the specified responsibilities and relationships among the subsystems.
A pattern is basically a starting point of a process for the development of a specific software solution. Patterns enable a software developer to work along a path beginning with a pattern and ending with specific software products that must be selected and configured to work together in a runtime package that provides an executable solution for the specific problem.